package com.party.orders.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.party.domain.Coupon;
import com.party.domain.User;
import com.party.dto.Response;
import com.party.orders.dto.CountAmountDTO;
import com.party.orders.service.CouponService;

/**
 * 
 * @author Caizhf
 * @date 2017年7月28日下午4:17:09
 * @version v.0.1
 * @email 1115054416@qq.com 
 *
 * <p>Description: 优惠券控制器</p>
 *
 */
@RestController
@RequestMapping("/coup")
public class CouponController {
	
	@Autowired
	private CouponService service;
	
	/**
	 * 功能：领卷
	 * 
	 * 注意：各字段含义请参考Coupon对象注释
	 * 
	 *  /coup/add?cpid=*
	 * @param cpid	劵id号码
	 * @return
	 */
	@RequestMapping("/add")
	public Response save(@RequestParam("cpid")int cpid){
		User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
		service.save(user.getId(),cpid);
		return Response.success();
	}
	
	
	/**
	 * 功能：查单个详细
	 * 
	 * /coup/get/*
	 * @param cpid
	 * @return
	 */
	@RequestMapping("/get/{cpid}")
	public Response get(@PathVariable int cpid){
		return Response.success(service.findById(cpid));
	}

	
	/**
	 * 功能：查询列表、模糊查询、按过期与否查询、可根据当前session的用户查询、可按是否使用过的的状态来查询
	 * 
	 * /coup/list/*?pageSize=*&key=* 
	 * 查所有或者模糊查询、根据用户id查询他所拥有的优惠券
	 * 
	 * @param pageSize
	 * @param pageNum
	 * @param key 可为空，如果不为空就是按名字模糊查询
	 * @param isUser 可为空，如果为true就是根据session用户id查询所拥有的优惠券
	 * @param isOverdue 可为空，如果不为空，true为查询过期的劵，false为未过期的
	 * @param couponStatus 可为空，如果不为空，传入0是查询未使用的，1是查询已使用的
	 * @return
	 */
	@RequestMapping("/list/{pageNum}")
	public Response list(@RequestParam("pageSize")int pageSize,@PathVariable int pageNum,
			String key,Boolean isUser,Boolean isOverdue,Integer couponStatus){
		//如果需要根据用户id查询，请传入true
		if(isUser != null&&isUser){
			User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
			return Response.success(service.list(pageNum,pageSize,key,user.getId(),isOverdue,couponStatus));
		}else
			return Response.success(service.list(pageNum,pageSize,key,null,isOverdue,couponStatus));
	}
	
	/**
	 * 	功能：传入所有商品的总价，拿出session用户所能用的优惠券
	 * 	@param siteTotalAmount; 				// 场地总价
	 *	@param talentServiceTotalAmount; 		// 达人服务的总价
	 *	@param caterTotalAmount; 				// 餐饮总价
	 *	@param busTotalAmount; 				// 包车总价
	 *	@param setMealTotalAmount; 			// 套餐总价
	 *	@param decorationProductTotalAmount;	// 场地布置下的商品总价
	 * @return 用户能使用的优惠券
	 */
	@RequestMapping("/list/use")
	public Response listByCanUse(CountAmountDTO dto){
		User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
		return Response.success(service.listByCanUse(dto,user.getId()));
	}
	
	
}
